%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%  Copyright by Wenliang Du.                                       %%
%%  This work is licensed under the Creative Commons                %%
%%  Attribution-NonCommercial-ShareAlike 4.0 International License. %%
%%  To view a copy of this license, visit                           %%
%%  http://creativecommons.org/licenses/by-nc-sa/4.0/.              %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


% -------------------------------------------
% SUBSECTION
% ------------------------------------------- 
\subsection{DNS 配置总结} 

所有容器已经为本实验配置好了。 
我们在这里提供一个总结，以便学生了解这些配置。配置的详细说明
可以在手册中找到。

\paragraph{本地 DNS 服务器。} 
我们在本地 DNS 服务器上运行 BIND 9 DNS 服务器程序。 
BIND 9 的配置放在 \path{/etc/bind/named.conf} 的文件中。这个文件
是主配置文件，它通常包含几个 \texttt{"include"} 条目，
实际的配置存储在这些被 include 的文件中。其中一个
文件为 \path{/etc/bind/named.conf.options}。 
主要的配置就在这个文件里。 

\begin{itemize}
\item \textit{简化。}
DNS 服务器现在会随机化
它们 DNS 查询的源端口号；这使得攻击变得更加困难。遗憾的是，许多 DNS 服务器仍然使用可预测的源端口号。为了简化本实验，我们在配置文件中将源端口号固定为 {\tt 33333}。 

\item \textit{关闭 DNSSEC。} 
DNSSEC 是为防止对 DNS 服务器的攻击而引入的安全机制。
为了展示攻击在没有这种保护机制下是如何工作的，我们在配置文件中关闭了这个保护机制。 

\item \textit{DNS 缓存。}
在攻击过程中，我们需要检查本地 DNS 服务器的 DNS 缓存。
以下两个命令与 DNS 缓存相关。
第一个命令将缓存内容转储到文件 \path{/var/cache/bind/dump.db} 中， 
第二个命令则清空缓存。

\begin{lstlisting}
# rndc dumpdb -cache    // 将缓存转储到指定文件
# rndc flush            // 清空 DNS 缓存
\end{lstlisting}

\item \textit{转发 \texttt{attacker32.com} 区域。}
我们在本地 DNS 服务器中添加了一个转发区域，目的是为了
当有人查询 \texttt{attacker32.com} 域名时， 
查询会被转发到运行在攻击者容器（10.9.0.153）中的域名服务器。这个转发区域
设置在 \texttt{named.conf} 文件中。

\begin{lstlisting}
zone "attacker32.com" {
    type forward;
    forwarders { 
        10.9.0.153; 
    };
};
\end{lstlisting}
\end{itemize}

\paragraph{用户机器。}
{\tt 10.9.0.53} 已经设置成用户容器 {\tt 10.9.0.5} 的本地 DNS 服务器，
这是通过修改用户机器的 \texttt{/etc/resolv.conf} 来实现的。
服务器 \texttt{10.9.0.53} 被添加为文件中的第一个 \texttt{nameserver} 条目，
所以该服务器将作为首选 DNS 服务器。

\paragraph{攻击者的域名服务器。}
在攻击者的域名服务器上，我们托管了两个区域。一个是 
攻击者的合法区域 \texttt{attacker32.com}，另一个是伪造的 \texttt{example.com} 区域。区域的
配置在 \path{/etc/bind/named.conf} 文件中：

\begin{lstlisting}
zone "attacker32.com" {
        type master;
        file "/etc/bind/attacker32.com.zone";
};

zone "example.com" {
        type master;
        file "/etc/bind/example.com.zone";
};
\end{lstlisting}
